
// 防抖：防抖指的是在事件触发n秒后再执行后调，如果在n秒内再次被触发，则重新计算时间。
// fn代表有个函数，里面可能会频繁发生回调或ajax
// delay表示间隔多少毫秒才触发，默认200毫秒

export function debounce(fn:Function,delay=200){
    let timer:NodeJS.Timeout | null = null;
    return function (){
        if(timer){
            clearTimeout(timer);
        }
        timer=setTimeout(()=>{
            fn.apply(fn,arguments);
            timer = null;
        },delay)
    }
}



// 节流：节流是指如果持续触发某个事件，则每隔n秒执行一次
// fn代表可能会频繁发生回调或ajax请求的函数
// delay表示间隔多少毫秒才触发，默认100毫秒


export function throttle(fn:Function,delay=100){
    //首先设定一个变量，在没有执行我们的定时器为null
    let timer:NodeJS.Timeout|null = null;
    return function (){
        //当我们发现这个定时器存在时，则表示定时器已经在运行中，需要返回
        if(timer) return;
        timer =setTimeout(()=>{
            fn.apply(fn,arguments);
            timer = null;
        },delay)
    }
}
